// 生成器函数回顾

//生成器函数仅在普通函数前多一个 *
function * foo () {
    console.log('start');

    try{
        //可以使用 yield 关键词向外返回一个值
        //返回对象当中还有一个done属性 表示是否全部执行结束 
        //并且不会立即结束该函数foo的执行 而是暂定该函数foo的执行 直到下一个next()操作 才会继续往下执行
        const res = yield 'foo'
        console.log(res);
    } catch (e) {
        console.log(e);
    }
}

//调用生成器函数并不会立即执行 而是得到一个生成器对象
const generator = foo ()

//当调用生成器函数的 next() 方法才会开始执行
const result = generator.next()
console.log(result);

//传入参数时 则会作为 yield 的返回值
// generator.next('bar')

//对生成器内部抛出一个异常 内部再继续往下执行就会得到该异常
generator.throw(new Error('Generator error'))